/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package lucava.metamodel.uspeed.visitor;

import lucava.metamodel.uspeed.RelationElement;
import lucava.metamodel.uspeed.MethodElement;
import lucava.metamodel.uspeed.ParameterElement;
import lucava.metamodel.uspeed.ClassElement;
import lucava.metamodel.uspeed.UspeedDocument;
import lucava.metamodel.uspeed.AttributeElement;

/**
 *
 * @author glenn
 */
public interface IElementVisitor {

    /**
     * Visite à l'entrée d'un parametre
     *
     * @param element
     */
    public void enterParameter(ParameterElement element);

    /**
     * Visite à l'entrée d'un parametre
     *
     * @param element
     */
    public void enterAttribute(AttributeElement element);

    /**
     * Visite à l'entrée d'une méthode
     *
     * @param element
     */
    public void enterMethod(MethodElement element);

    /**
     * Visite à l'entrée d'une relation
     *
     * @param element
     */
    public void enterRelation(RelationElement element);

    /**
     * Visite à l'entrée d'une classe
     *
     * @param element
     */
    public void enterClass(ClassElement element);

    /**
     * Visite à l'entrée d'un document
     *
     * @param element
     */
    public void enterDocument(UspeedDocument document);

    /**
     * Visite à la sortie d'un parametre
     *
     * @param element
     */
    public void leaveParameter(ParameterElement element);

    /**
     * Visite à la sortie d'un attribut
     *
     * @param element
     */
    public void leaveAttribute(AttributeElement element);

    /**
     * Visite à la sortie d'une méthode
     *
     * @param element
     */
    public void leaveMethod(MethodElement element);

    /**
     * Visite à la sortie d'une classe
     *
     * @param element
     */
    public void leaveClass(ClassElement element);

    /**
     * Visite à la sortie d'une relation
     *
     * @param element
     */
    public void leaveRelation(RelationElement element);

    /**
     * Visite à la sortie d'un document
     *
     * @param element
     */
    public void leaveDocument(UspeedDocument document);
}
